package com.project.base.common;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Excel解析工具
 *
 * @author wxliyong
 * @version V1.0.0
 * @Title: ExcelUtil.java
 * @Package com.lvmama.excel
 * @date 2016-1-14 下午8:35:03
 */
public class ExcelUtil {

    /**
     * 解析Excel，该API仅支持解析Excel2003版本的xls形式的文件<br>
     * 格式：<br>
     * List&lt;整个sheet的数据&gt; <br>
     * List&lt;List&lt;整行的数据&gt;&gt;
     *
     * @param fileName Excel的文件名
     * @author wxliyong
     * @date 2016-1-14 下午9:17:32
     */
    public static List<List<String[]>> parseExcel(String fileName) {
        // 用户存放excel数据 -- 格式：List<整个sheet的数据> List<List<整行的数据>>
        List<List<String[]>> result = new ArrayList<List<String[]>>();
        // Excel文件对象
        Workbook book = null;
        try {
            // 获取文件资源URL
            URL url = Thread.currentThread().getContextClassLoader().getResource(fileName);
            // Excel文件对象
            File file = new File(url.toURI());
            book = Workbook.getWorkbook(file);
            // 获取Excel中的所有sheet
            Sheet[] sheets = book.getSheets();
            // 遍历解析所有sheet
            for (int j = 0; j < sheets.length; j++) {
                // 存储一个Sheet中的数据对象
                List<String[]> sheetData = new ArrayList<String[]>();
                result.add(sheetData);
                Sheet sheet = sheets[j];
                int rows = sheet.getRows();
                // 遍历所有行，解析每一行数据
                for (int k = 0; k < rows; k++) {
                    // 每一行中的所有列
                    int columns = sheet.getColumns();
                    String[] rowData = new String[columns];
                    sheetData.add(rowData);
                    // 遍历所有列，解析每一行中的每一列数据
                    for (int i = 0; i < columns; i++) {
                        Cell cell = sheet.getCell(i, k);
                        String contents = (cell.getContents() == null ? "" : cell.getContents().trim());
                        rowData[i] = contents;
                    }
                }
            }
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } finally {
            if (null != book) {
                book.close();
            }
        }
        return result;
    }
}
